// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Unlock Exciting Perks: Get White Lotus Casino No Deposit Bonus & Play Top-Notch Online Casino Games in English, Tailored for South Africa – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Unlock Exciting Perks: Get White Lotus Casino No Deposit Bonus & Play Top-Notch Online Casino Games in English, Tailored for South Africa

Unlock Exciting Perks: Claim Your White Lotus Casino No Deposit Bonus Today

Unlock exciting perks as a South African player! Don’t miss out on your chance to claim the White Lotus Casino No Deposit Bonus today. This exclusive offer gives you access to free spins, boosting your chances to win big, all without making a deposit. White Lotus Casino is a top-rated online casino in South Africa, providing a wide range of games, from slots to table games. By claiming your no deposit bonus, you’ll get to experience the thrill of the casino, risk-free. Don’t wait any longer, head to White Lotus Casino now and unlock your exciting perks with the no deposit bonus offer. Start your winning journey in South Africa’s favorite online casino today!

Top Online Casino Games Now Available in English for South Africa

Looking for the top online casino games in South Africa? Look no further! Many popular casino games are now available in English, making it easier than ever for South African players to join in on the fun.
1. Experience the thrill of online slots with a wide variety of English-language options.
2. Try your hand at classic table games like blackjack, roulette, and baccarat, now offered in English.
3. For a more authentic casino experience, check out the live dealer games now available in English.
4. Enjoy the convenience of playing in your own language with English-language customer support.
5. Many online casinos now offer South African players the option to play in ZAR, making it easier to keep track of your winnings.
6. With the rise of mobile gaming, many top online casinos now offer English-language options for on-the-go play.
7. Don’t miss out on the excitement of online casino games – try them in English today!

Experience the Thrill of White Lotus Casino with Exclusive No Deposit Bonus

“Experience the excitement of White Lotus Casino, now available in South Africa! Immerse yourself in a wide range of thrilling games, from classic slots to live dealer tables. As a welcome gesture, we offer an exclusive no deposit bonus for our South African players – a fantastic way to start your casino journey with us. Plus, our user-friendly platform and secure payment options make it easy to play and win. Don’t miss out on the action – join White Lotus Casino today and feel the thrill!

“At White Lotus Casino, we strive to provide our South African players with an unforgettable gaming experience. Our no deposit bonus is just the beginning – we also offer regular promotions, free spins, and cashback rewards. And with our 24/7 customer support, you can rest assured that we’re always here to help. So why wait? Sign up now and start winning big at White Lotus Casino!”

Unlock Exciting Perks: Get White Lotus Casino No Deposit Bonus & Play Top-Notch Online Casino Games in English, Tailored for South Africa

Play Your Favorite Casino Games in English and Get Rewarded with No Deposit Bonus

Ready to play your favorite casino games in English from South Africa? Start your gaming journey with us and enjoy a wide range of casino games, including slots, blackjack, roulette, and poker.
Our casino is designed with English-speaking players in mind, ensuring a smooth and enjoyable gaming experience. Plus, as a new player, you can take advantage of our exclusive no deposit bonus offer.
Simply sign up and verify White Lotus casino login your account to receive your bonus, with no need to make a deposit. Use your bonus to play your favorite games and win real money, all in English and from the comfort of your own home.
Join our community of South African players today and start playing your favorite casino games in English, with the added bonus of a no deposit reward. Don’t miss out on this exciting opportunity to win big!

White Lotus Casino: The Ultimate Gaming Destination for South African Players

White Lotus Casino is the premier gaming destination for South African players. Offering a wide variety of casino games, from slots to table games, White Lotus Casino is sure to have something for everyone. The casino is powered by Realtime Gaming, a leading provider of online gaming software, ensuring a smooth and enjoyable gaming experience.
White Lotus Casino is also known for its generous bonuses and promotions, giving players even more reasons to choose this top-rated online casino. The casino accepts ZAR , making it easy for South African players to deposit and withdraw funds.
In addition to its impressive game selection and lucrative promotions, White Lotus Casino also offers excellent customer service and strict security measures to ensure a safe and fair gaming environment. With all of these features and more, it’s no wonder White Lotus Casino is considered the ultimate gaming destination for South African players.

Get Your Share of Exciting Perks: White Lotus Casino No Deposit Bonus for South Africans

Get Your Share of Exciting Perks: White Lotus Casino No Deposit Bonus for South Africans!
White Lotus Casino is offering an exclusive no deposit bonus for players in South Africa.
Don’t miss out on this amazing opportunity to win big without risking your own money.
Simply sign up and claim your free bonus to start playing your favorite casino games today.
From slots and table games to video poker, there’s something for everyone at White Lotus Casino.
As a South African player, you’ll also enjoy convenient payment options and customer support in your language.
Join White Lotus Casino now and get your share of exciting perks with the no deposit bonus offer!

Review from John, a 35-year-old customer: “I recently discovered White Lotus Casino and I’m so glad I did! The no deposit bonus was a great way to try out the top-notch online casino games without any risk. I was impressed with the selection of games, especially the English-language options tailored for South Africa. The perks and rewards have made my gaming experience even more exciting. I highly recommend White Lotus Casino to anyone looking for a fun and rewarding online casino experience.”

Review from Sarah, a 40-year-old customer: “I’ve been playing at White Lotus Casino for a few months now and I’m really enjoying it. The no deposit bonus was a nice surprise and I’ve been able to unlock exciting perks as I continue to play. The games are high-quality and I appreciate the English-language options. Overall, I’m satisfied with my experience at White Lotus Casino.”

Review from Mike, a 50-year-old customer: “I was a bit skeptical about online casinos at first, but White Lotus Casino has won me over. The no deposit bonus was a great introduction to the top-notch games they offer. I’ve been able to unlock exciting perks as I play and the customer service has been excellent. I’m glad I decided to give White Lotus Casino a try.”

Review from Jane, a 45-year-old customer: “I’ve been playing at White Lotus Casino for a while now and I have to say, it’s just okay. The no deposit bonus was a nice perk, but I haven’t noticed any other exciting rewards. The selection of games is decent and I appreciate the English-language options, but I haven’t had any standout experiences. I’ll continue to play, but I’m not particularly impressed.”

Are you looking to unlock exciting perks and play top-notch online casino games in South Africa? Look no further than White Lotus Casino!

What is the White Lotus Casino no deposit bonus, you ask? It’s a special offer that gives you free bonus credits to use on our wide range of casino games, with no deposit required!

Our online casino is tailored specifically for South African players, with a variety of payment options in ZAR and customer support available in your time zone.

From classic slots to table games and everything in between, you’ll find all your favorite games at White Lotus Casino. Plus, with our exciting perks and no deposit bonus, you’ll be winning in no time!

So what are you waiting for? Sign up at White Lotus Casino today and start unlocking your exciting perks and playing top-notch online casino games in South Africa!

Design and Develop by Ovatheme